#ifndef ABOUTDIALOG_H
#define ABOUTDIALOG_H

#include <QDialog>
#include <QLabel>
#include <QPushButton>
#include <QVBoxLayout>
#include <QHBoxLayout>
#include <QFrame>
#include <QProgressBar>
#include <QTimer>
#include "app_version.h"

class AboutDialog : public QDialog
{
    Q_OBJECT

public:
    explicit AboutDialog(QWidget *parent = nullptr);
    ~AboutDialog();

    // 设置版本信息
    void setCurrentVersion(const QString& version);
    void setServerVersion(const QString& version);
    void setUpdateAvailable(bool available, const QString& serverVersion = QString());
    void setUpdateInfo(const QString& version, const QString& downloadUrl, const QString& releaseNotes, const QString& md5, const QString& fileSize = QString());

signals:
    void checkForUpdatesRequested();
    void showUpdateDialogRequested(const QString& version, const QString& downloadUrl, const QString& releaseNotes, const QString& md5);
    void updateStatusBarButtonRequested(bool hasUpdate);  // 请求更新状态栏按钮

public slots:
    void onCheckForUpdates();

private:
    void setupUI();
    void setupStyles();
    void updateUpdateButton();

private:
    // UI组件
    QLabel* m_appNameLabel;
    QLabel* m_versionLabel;
    QLabel* m_descriptionLabel;
    QPushButton* m_closeButton;

    // 布局
    QVBoxLayout* m_mainLayout;

    // 数据
    QString m_currentVersion;
    QString m_serverVersion;
    bool m_updateAvailable;
    bool m_isCheckingUpdate;

    // 更新信息（用于传递给UpdateDialog）
    QString m_downloadUrl;
    QString m_md5Hash;
    QString m_releaseNotes;

    // 样式常量
    static const int DIALOG_WIDTH = 450;
    static const int DIALOG_HEIGHT = 350;  // 增加高度以容纳大字体应用名称
    static const int BUTTON_HEIGHT = 40;
    static const int PROGRESS_HEIGHT = 6;
};

#endif // ABOUTDIALOG_H